home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / emacs-complete / fsf / emacs / lib-src / test-distrib.c < prev    next >
C/C++ Source or Header  |  1993-05-15  |  2KB  |  70 lines

  1. #include <stdio.h>
  2.  
  3. /* Break string in two parts to avoid buggy C compilers that ignore characters
  4.    after nulls in strings.  */
  5.  
  6. char string1[] = "Testing distribution of nonprinting chars:\n\
  7. Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\
  8. Should be 0000: ";
  9.  
  10. char string2[] = ".\n\
  11. This file is read by the `test-distribution' program.\n\
  12. If you change it, you will make that program fail.\n";
  13.  
  14. char buf[300];
  15.   
  16. /* Like `read' but keeps trying until it gets SIZE bytes or reaches eof.  */
  17. int
  18. cool_read (fd, buf, size)
  19.      int fd;
  20.      char *buf;
  21.      int size;
  22. {
  23.   int num, sofar = 0;
  24.  
  25.   while (1)
  26.     {
  27.       if ((num = read (fd, buf + sofar, size - sofar)) == 0)
  28.     return sofar;
  29.       else if (num < 0)
  30.     return num;
  31.       sofar += num;
  32.     }
  33. }
  34.  
  35. main (argc, argv)
  36.      int argc;
  37.      char **argv;
  38. {
  39.   int fd;
  40.  
  41.   if (argc != 2)
  42.     {
  43.       fprintf (stderr, "Usage: %s testfile\n", argv[0]);
  44.       exit (2);
  45.     }
  46.   fd = open (argv[1], 0);
  47.   if (fd < 0)
  48.     {
  49.       perror (argv[1]);
  50.       exit (2);
  51.     }
  52.   if (cool_read (fd, buf, sizeof string1) != sizeof string1 ||
  53.       strcmp (buf, string1) ||
  54.       cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 ||
  55.       strncmp (buf, string2, sizeof string2 - 1))
  56.     {
  57.       fprintf (stderr, "Data in file `%s' has been damaged.\n\
  58. Most likely this means that many nonprinting characters\n\
  59. have been corrupted in the files of Emacs, and it will not work.\n",
  60.            argv[1]);
  61.       exit (2);
  62.     }
  63.   close (fd);
  64. #ifdef VMS
  65.   exit (1);            /* On VMS, success is 1.  */
  66. #else
  67.   exit (0);
  68. #endif
  69. }
  70.